home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Directorty Opus 5 - Magellan
/
Opus 5 - Magellan.iso
/
Extras
/
D51_NUSource
/
Source
/
Singles
/
RexxSend.s
< prev
Wrap
Text File
|
1996-01-06
|
16KB
|
350 lines
*=- PROGRAM INFORMATION -=*************************************************************
* NoSoSuper-RexxSend, ©1995 Leo Davidson *
*=====================================================================================*
* Purpose: This program sends messages to a program's ARexx port and returns the *
* results in a requester. *
* (Written to test my ARexx/rexxsyslib.library routines). *
***************************************************************************************
*=- ASSEMBLE-TIME SWITCHES -=**********************************************************
* Comment out to disable the effect(s) described. *
***************************************************************************************
;Beta_Version ; Include Debug-Labels, Beta messages, etc.
Beta_Version_ARexx ; Include runtime-info about ARexx messages sent.
;Test_Pool_On_OS3 ; Force use of non-ROM pool routines, even with OS3+.
DOpus5_Error ; Enable Error messages via DOpus5/"dopus request".
;No_Requesters ; Disable all requester-based output.
; All error messages will be sent to shell.
; Will also turn off "Please insert volume XXX" reqs.
;Default_Req ; Make requesters the default for error messages.
*=- VERSION INFORMATION -=*************************************************************
* Things like versions numbers, dates, and the name of the program are all defined *
* here as macros to save having to edit the entire source code. *
*=====================================================================================*
* The version strings should conform to the style guide. (Even though I think it *
* isn't the best way to do it, it's a standard :-( ). *
***************************************************************************************
PROGNAM MACRO Program name.
dc.b "NoSoSuper-RexxSend" /No spaces!/
ENDM
VERSION MACRO The version of the program.
dc.b "1.5" version.revision - /No leading zeros/
ENDM
REVDATE MACRO Date of completion.
dc.b "21.8.95" DD.MM.YY - /No leading zeros/
ENDM
REVDAT2 MACRO Date of completion.
dc.b "21-Aug-1995" /Any format/ (Not in $VER string)
ENDM
*=- ASSEMBLER INFORMATION/OPTIONS -=***************************************************
Section Super_Main,Code Assemble to Public Memory.
IFD Beta_Version -.
Opt D+ |
Opt hcln |_ Debug info ON
ELSE | for Beta Versions.
Opt D- |
ENDC -'
***************************************************************************************
Bra ProgBeg Jump to the start of the program.
***************************************************************************************
VerStr Dc.b "$VER: " -.
PROGNAM |
IFD Beta_Version |
Dc.b "_BETA" |
ENDC |_ For 2.0+ Version Command
Dc.b " " | (At the top to make "Version"
ActVer VERSION | find it quicker!)
Dc.b " (" |
REVDATE |
Dc.b ")",0 -'
Even
;=====================================================================================;
; Include Asm:Include/Nudel_Constants.i
;
; include dos/dos.i
; include dos/var.i
; include exec/types.i
; include exec/nodes.i
; include exec/memory.i
; include rexx/storage.i
; include intuition/intuition.i
; include intuition/intuitionbase.i
; include libraries/iffparse.i
;
; include ASM:LVO3.0/dos_lib.i
; include ASM:LVO3.0/exec_lib.i
; include ASM:LVO3.0/intuition_lib.i
; include ASM:LVO3.0/rexxsyslib_lib.i
; include ASM:LVO3.0/utility_lib.i
; include ASM:LVO3.0/iffparse_lib.i
; include ASM:LVO3.0/mathieeedoubbas_lib.i
; include ASM:LVO3.0/graphics_lib.i
Include Nudel_Symbols.gs
***************************************************************************************
* The Variables (Address Equates for Space allocated at program start) *
***************************************************************************************
RSReset
;=====================================================================================;
N_DTStruc Equ __RS ;- Date-Time Structure -----------------------;
;=====================================================================================;
N_DT_Days Rs.l 1 Days Since 1978
N_DT_Mins Rs.l 1 Mins Since Midnight
N_DT_Tiks Rs.l 1 Ticks Since Minute (Always Even*50)
N_DT_4Mat Rs.b 1 Format -.
N_DT_Flag Rs.b 1 Flags |
N_DT_Name Rs.l 1 Date Adr |- For Outputting.
N_DT_Date Rs.l 1 Name Adr |
N_DT_Time Rs.l 1 Time Adr -'
;- End of DTStruc --------------------------------------------------------------------;
D8_Name Rs.b 16 Name String -.
D8_Date Rs.b 16 Date String |- Output buffers.
D8_Time Rs.b 16 Time String -'
IFND No_Requesters
;=====================================================================================;
N_EasyStruct Equ __RS ;- EasyStruct for EasyRequest ----------------;
;=====================================================================================;
N_ES_Length Rs.l 1 Length of the structure.
N_ES_Flags Rs.l 1 Flags (not currently supported).
N_ES_Title Rs.l 1 Ptr to NullTerm Title Text.
N_ES_Body Rs.l 1 Ptr to NullTerm Body Text.
N_ES_Gadgets Rs.l 1 Prt to Gadget(s) Texts.
N_EasyStruct_Len Equ (__RS)-N_EasyStruct
ENDC
;=====================================================================================;
; Nudel Info-Block Stuff ;
;=====================================================================================;
FakeNIB Rs.b NIB_SizeOf ;- Fake NIB for setting pseudo-filenames -----;
FakeNIB_Adrs Rs.l 1 Address of FakeNIB (saves a few "lea"'s).
Active_NIB Rs.l 1 Ptr to currently "Active" NIB, or null.
Base_NIB Rs.l 1 Ptr to base NIB in linked list, or null.
Last_NIB Rs.l 1 Ptr to last NIB in linked list, or null.
CAction Rs.l 1 Ptr to current "Action" error message.
;=====================================================================================;
;=====================================================================================;
; READARGS() STUFF ;
;=====================================================================================;
RDA_Rtn Rs.l 1 Pointer to returned RDArgs structure
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
RDA_Array Equ __RS Array of longwords matching template
RDA_Template Equ *
RexxPort_A Rs.l 1
Dc.b "RP=REXXPORT/A,"
RexxCommand_A Rs.l 1
Dc.b "RC=REXXCOMMAND/A,"
Reqs_S Rs.l 1
Dc.b "REQ=REQS/S"
RDA_Temp_Len Equ *-RDA_Template
Dc.b 0
Even
;=====================================================================================;
; OPEN_LIBRARIES STRUCTURES ;
;=====================================================================================;
LibBases_Start Equ __RS
LibData_Start Equ *
; NOTE: The open_lib_error routine requires lib-versions < 100
N_DOSBase Rs.l 1
DOSName_Ptr Dc.l N_DOSName-LibNames_Start
DOSVers Dc.l 37
N_RexBase Rs.l 1
RexName_Ptr Dc.l N_RexName-LibNames_Start
RexVers Dc.l 0
IFND No_Requesters
N_IntBase Rs.l 1
IntBase_Ptr Dc.l N_IntName-LibNames_Start
IntVers Dc.l 37
ENDC
LibBases_Finish Equ __RS
NumLibs Equ (LibBases_Finish-LibBases_Start)/4
;-------------------------------------------------------------------------------------;
LibNames_Start Equ *
N_DOSName DOSNAME
N_RexName REXXSYSLIBNAME
IFND No_Requesters
N_IntName INTNAME Required by Open_Libraries_Error rtn.
ENDC
Even
;=====================================================================================;
; FLAG BYTES ;
;=====================================================================================;
STD_F_1 Rs.b 1 Standard files.
EVEN_F_1 Rs.b 1 (Here as an Even)
;=====================================================================================;
; VARIOUS DATA ;
;=====================================================================================;
DosRtnC Rs.l 1 Return code for DOS. (-> d0 at end)
;=====================================================================================;
; RawDoFmt() Stuff ;
;=====================================================================================;
; IFD DATA_RAWDOFMT
RDF_Size Rs.l 1 Size of RawDoFmt() buffer.
RDF_Adrs Rs.l 1 Address of RawDoFmt() buffer.
RDF_Array Equ __RS
RDF_1_Long Rs.l 1 -.
RDF_2_Long Rs.l 1 |_ DataArray for
RDF_3_Long Rs.l 1 | RawDoFmt()
RDF_4_Long Rs.l 1 -'
; ENDC
;=====================================================================================;
; VARIOUS ADDRESS-POINTERS ;
;=====================================================================================;
StarStk Rs.l 1 Original Stack Pointer.
PoolHead Rs.l 1 Header for program's memory pool.
CLI_Hdl Rs.l 1 Output CLI (or whatever) handle.
NudelPort Rs.l 1 Pointer to our MsgPort.
NudelRexxMsg Rs.l 1 Pointer to our RexxMsg.
CRexxPort Rs.l 1 Ptr to name of current Rexx host to talk to.
;=====================================================================================;
; TEMP STORAGE ;
;=====================================================================================;
Buffer1Len Equ 1024
Buffer1 Rs.b Buffer1Len Buffer for anything
Buffer2Len Equ 1024
Buffer2 Rs.b Buffer2Len Buffer for anything
BufferALen Equ 1024
BufferA Rs.b BufferALen Buffer for anything
Temp001 Rs.l 1 -._ For temp storage
Temp002 Rs.l 1 -' in routines.
;=====================================================================================;
NULLEND Equ __RS ;- Overlays Start Here -----------------------;
;=====================================================================================;
;=====================================================================================;
LENVARS Equ __RS ;- End of variables/overlays -----------------;
;=====================================================================================;
*=- MAIN PROGRAM -=********************************************************************
* Calls the subroutines. *
***************************************************************************************
ProgBeg Bsr.s Setup Allocate Mem and initialize stuff.
Move.l RexxCommand_A(a5),a1 Point to the command.
Bsr FillAndSendNudelRexxMsg Send it off.
Bra.s Finish Close/Deallocate everything and exit.
*=- SETUP -=***************************************************************************
* Allocate Memory, Open Libraries, Parse Commandline, etc *
* This MUST be the first Subroutine run. *
***************************************************************************************
Setup Move.l #Memf_Public!Memf_Clear,d0 Public, Cleared mem.
Move.l #5120,d1 Puddle size = 5k.
Move.l #5120,d2 Thresh size = Puddle size.
Bsr AsmCreatePool Create this prog's mem pool.
Move.l a0,-(SP) Preserve PoolHeader
Bne.s SGotMm1 -.
Addq.l #4,a7 |_ If Allocation failed, Quick Exit.
Moveq #RETURN_FAIL,d0 | pool and do a quick exit.
RTS -'
SGotMm1 Move.l #LENVARS,d0 Size of variables' memory
;;;;;;; Move.l a0,a0 PoolHeader to a0 for allocation.
Bsr AsmAllocPooled Allocate for the variables.
Move.l (SP)+,a0 Restore PoolHeader
Move.l d0,a5 Put variable/overlay address into A5
Tst.l d0 (Moves to a? don't set CCR).
Bne.s SGotMm2 -.
Bsr AsmDeletePool |
Addq.l #4,a7 |- If Allocation failed, delete the
Moveq #RETURN_FAIL,d0 | pool and do a quick exit.
RTS -'
SGotMm2 Move.l a0,PoolHead(a5) Store header of memory pool.
Lea FakeNIB(a5),a0 -._ Store address of FakeNIB(a5)
Move.l a0,FakeNIB_Adrs(a5) -' for quick access later.
Move.l #RETURN_OK,DosRtnC(a5) Default DOS return code: "OK".
IFD LENOVER
Lea NULLEND(a5),a0 -.
Lea Over01(pc),a1 | Copy Overlay
Move.l #(LENOVER/2)-1,d0 |- Backings onto
OverPrL Move.w (a1)+,(a0)+ | Overlay Space (word moves)
DBra d0,OverPrL -'
ENDC
;=====================================================================================;
Move.l a7,StarStk(a5) Store Stack Pointer
Addq.l #4,StarStk(a5) Compensate for this being a subrout.
IFND No_Requesters
SetReqDefault Set default to requester/shell.
ENDC
Bsr Open_Libraries Open libraries.
N_CallDOS Output -._ Get output Handle
Move.l d0,CLI_Hdl(a5) -' (CLI window or whatever)
;;;;;;; Setup any non-zero default values for switch options here (below).
Bsr RArgNor Parse the commandline with ReadArgs
Move.l RexxPort_A(a5),CRexxPort(a5) Use RexxPort from CmdLine.
Bsr.s CreateNudelPort Create our MsgPort.
RTS
*=- FINISH -=**************************************************************************
* Close Everything Down, Return Memory Etc to System and End Program *
*=====================================================================================*
* All routines in this section MUST make sure that what they are about to free back *
* to the system has actually been taken in the first place! (With the exception of *
* the Main-Variable memory: if this could not be allocated the program will have *
* quit without calling Finish.) *
*=====================================================================================*
* The Finish routine may be called from sub-routines at any level because the *
* original stack-pointer is restored so that RTS always quits the prog. *
***************************************************************************************
Finish
IFD Beta_Version
Bsr_ErrorN ErrAct_FinishBetaMsg(pc),#0
ENDC
Bsr DeleteNudelRexxMsg Delete our RexxMsg (also clears arguments).
Bsr.s DeleteNudelPort Delete our MsgPort
;;;;;;; Bsr NIBs_DeleteAll Delete all Nudel-Info-Blocks :-)
Bsr FArgNor Free the commandline related memory.
Bsr Close_Libraries Close all open libraries.
Move.l StarStk(a5),a7 Ignore all Branches.
Move.l DosRtnC(a5),-(SP) Store DOS return code...
Bsr LeoDeletePool Free the entire memory pool.
Move.l (SP)+,d0 Return code to d0 for DOS.
RTS End Program
IFD Beta_Version
ErrAct_FinishBetaMsg
Dc.b "Finish routine run",0
Even
ENDC
*=- EXTERNAL SUB-ROUTINES -=***********************************************************
* Sub-routines stored in external "library" files. *
***************************************************************************************
;=====================================================================================;
; OS Subroutines ;
;=====================================================================================;
SYS_CLIRITE ; Write text using CLI_Hdl(a5) as output handle.
SYS_READARG ; ReadArgs() routine.
SYS_FREEARG ; FreeArgs() routine.
SYS_CHKCRTC ; Check for ^C-Break and abort program if sent.
SYS_PORTS ; CreateMsgPort(), DeleteMsgPort() routines.
Include ASM:Source/Routines/System.s
;=====================================================================================;
; Data Subroutines. (Number/String Handling, etc etc) ;
;=====================================================================================;
DATA_NULLLEN ; Calculate the length of a Null-Term String.
DATA_COPYCN3 ; Copy chars with Null-Term, don't copy Null, no Length
DATA_CHARCNT ; Copy x chars with Null-Term
DATA_CHARCOP ; Copy x chars with specified terminator.
DATA_CHARCOPNL
DATA_NUM2ASC ; Raw Number to ASCII conversion.
DATA_RAWDOFMT ; RawDoFmt() routine.
Include ASM:Source/Routines/Data.s
;=====================================================================================;
; Other routines. ;
;=====================================================================================;
Include ASM:Source/Routines/ARexx.s
Include ASM:Source/Routines/Pool.s
Include ASM:Source/Routines/OpenLibraries.s
;;;;;;; Include ASM:Source/Routines/NIB.s
; Note: NIB_DeleteAll has been removed from Finish.
***************************************************************************************
* THE END *
***************************************************************************************